func integerBreak(n int) int {
    /*
        1. 确定dp数组的含义
            dp[i]表示 i 拆分后的最大乘积
        2. 确定递推公式
            dp[i] = max(dp[i-j]*j, (i-j)*j)
        3. 递推公式初始化
            0，1，不能拆分不用初始化，对于dp数组来说无意义
        4. 确定遍历顺序
            由于后面的记过基于前面的结果，从后往前遍历即可
        5. 推导出dp数组
    */
    dp := make([]int, n+1)
    for i:=2; i<=n; i++{
        for j:=1; j<i; j++ {
            dp[i] = max(dp[i], max(dp[i-j]*j, (i-j)*j))
        }
    }
    return dp[n]
}

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}